﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net.Sockets;


namespace ConsoleApplication1
{
    public class Sender
    {

// ---------------------------------------------- Deklaration der Variablen ----------------------------------------------

        private TcpClient client;
        private StreamWriter writer;
        private String messageToServer;

// --------------------------------------------- Konstruktor Initialisierung ---------------------------------------------
        /*
         * Konstruktor des Senders initialisiert die Client-Variable
         * und holt dessen Stream außerdem erzeugt er 
         * einen neuen StreamWriter
         * @param client  bekommt einen TcpClient übergeben
         */
        public Sender(TcpClient client)
        {
            this.client = client;
            this.writer = new StreamWriter(client.GetStream());
        }

// ------------------------------------------------ öffentliche Methoden -------------------------------------------------
        /*
         * Methode zum Message-Senden an den Server
         * wird im Thread als Endlosschleife durchgeführt um den Server
         * ständig auf dem laufenden zu halten
         */
        public void SendMessageToServer()
        {
            
            writer.WriteLine("get:map");
            writer.Flush();
            while (true)
            {
                // "WriteLine"-Parameter ersetzern durch einen Übergabestring
                if (messageToServer != null)
                {
                    writer.WriteLine(messageToServer);
                    Console.WriteLine("im Sender: " + messageToServer);
                    messageToServer = null;
                }
                writer.WriteLine(Console.ReadLine());
                writer.Flush();
            }
        }

        public void sendMessage(String command)
        {
            Console.WriteLine("Befehl: "+command);
            writer.WriteLine(command);
            writer.Flush();
        }

// ----------------------------------------------- Getter/Setter-Methoden -----------------------------------------------

        /*
         * Getter/Setter-Methode für die Nachricht welche an den Server gesendet wird
         * @return gibt den String mit der Nachricht für den Server zurück
         */
        public String MessageToServer
        {
            get
            {
                return messageToServer;
            }
            set
            {
                this.messageToServer = value;
            }
        }


        /*
         * Getter/Setter-Methode für den Client, zur Speicherung des Clients um diesen weiter zu verwenden
         * Sowie die Abfrage auf den Client
         * @return gibt das Clientobjekt zurück
         */
        public TcpClient Client
        {
            get
            {
                return client;
            }
            set
            {
                this.client = value;
            }
        }

        /*
         * Getter/Setter-Methode für den Writer
         * Methode zum Aufbau des Writers um Nachrichten an den Server zu senden
         * @return gibt ein Objekt des Writers zurück
         */
        public StreamWriter Writer
        {
            get
            {
                return writer;
            }
            set
            {
                this.writer = value;
            }
        }

    }
}
